<?php

/**
 *  true -> Trace les actions dans un LOG.txt
 */
define("DEBUGMODE", true);

if (!isset($_POST["actions"])) {
    echo json_encode(array("error" => "No action send"));
    exit;
}
include "php/partie.class.php";
include "php/joueur.class.php";
include "php/evenement.class.php";
include "php/carte.class.php";
include "php/jeu.php";

mysql_connect('127.0.0.1', 'root', '');
mysql_select_db('uno');

$db = null;

$arborescence_log = 0;
$LOG_joueur = "404";

function log_it($txt, $a) {
    if (!DEBUGMODE)
        return;
    $a = intval($a);
    global $LOG_joueur;
    $logFileName = "log/".metaphone($LOG_joueur).".log";    
    $fh = fopen($logFileName, 'a+');
    global $arborescence_log;
    if ($a < 0)
        $arborescence_log = $arborescence_log + $a;
    for ($n = 0; $n < $arborescence_log; $n++)
        fwrite($fh, "  |  ");
    fwrite($fh, $txt . "\n");
    if ($a > 0)
        $arborescence_log = $arborescence_log + $a;
    fclose($fh);
}

$out = array();
$in = json_decode($_POST["actions"], true);
if (isset($in["token"])) {
    $token = $in["token"];
    $joueur = Joueur::getJoueur($token, $db);
    if ($joueur != null)
        $LOG_joueur = $joueur->getNom();
}
log_it("=== SERVEUR.PHP ===", 1);
Joueur::nettoyer($db);
Evenement::nettoyer($db);
foreach ($in["actions"] as $action) {
    log_it(json_encode($action), 1);
    if ($joueur == null && $action["action"] != "connecter_serveur") {
        $o = array();
        $o["action"] = $action["action"];
        $o["ok"] = 0;
        $o["error_message"] = "Token inconnue !";
        $out[] = $o;
    } else
        switch ($action["action"]) { // Switch d'action global
            case 'recup_liste_parties':
                recup_liste_parties($action, $out[], $joueur, $db); // $out[] pour creer une nouvelle entrée au tableau de sortie
                break;
            case 'connecter_serveur':
                connecter_serveur($action, $out[], $db);
                break;
            case 'creer_partie' :
                creer_partie($action, $out[], $db);
                break;
            case "rejoindre_partie" :
                rejoindre_partie($action, $out[], $joueur, $db);
                break;
            case "etat_partie" :
                etat_partie($action, $out, $joueur, $db);
                break;
            case "poser_carte":
                poser_carte($action, $out[], $joueur, $db);
                break;
            case "uno":
                uno($action, $out[], $joueur, $db);
                break;
            case "contre_uno":
                contre_uno($action, $out[], $joueur, $db);
                break;
            case "choix_couleur":
                choix_couleur($action, $out[], $joueur, $db);
                break;
            case "commencer_partie":
                commencer_partie($action, $out[], $joueur, $db);
                break;
            case "supprimer":
                supprimer($action, $out[], $joueur, $db);
                break;
            case "piocher":
                piocher($action, $out[], $joueur, $db);
                break;
            case "chat":
                chat($action, $out[], $joueur, $db); // CONFLIT
                break;
            default :
                $o = array();
                $o["action"] = $action["action"];
                $o["ok"] = 0;
                $o["error_message"] = "action inconnue !";
                $out[] = $o;
                break;
        }
    log_it("FIN " . $action["action"], -1);
}

log_it("=== FIN SERVEUR.PHP ===", -1);

function html_ent($tab){
    foreach ($tab as $k=>$n){
        if(is_array($n)){
            $tab[$k]=html_ent($n);
        } else $tab[$k]=htmlspecialchars($n);
    }
    return $tab;
}

echo json_encode(html_ent($out));

mysql_close();

usleep(200000);
usleep(800000);
